package com.cruise.game.common.enums;

import com.cruise.game.common.constants.SecurityConstants;
import lombok.AllArgsConstructor;
import lombok.Getter;

/**
 * 角色枚举
 *
 * @author cruise
 * @date 2025-02-28
 */
@Getter
@AllArgsConstructor
public enum RoleEnum {

    /**
     * 普通用户
     */
    USER(SecurityConstants.ROLE_USER, "普通用户"),

    /**
     * 代理
     */
    AGENT(SecurityConstants.ROLE_AGENT, "游戏代理"),

    /**
     * 管理员
     */
    ADMIN(SecurityConstants.ROLE_ADMIN, "管理员");

    /**
     * 角色值
     */
    private final String value;

    /**
     * 角色描述
     */
    private final String desc;

    /**
     * 根据角色值获取枚举
     *
     * @param value 角色值
     * @return 枚举
     */
    public static RoleEnum getByValue(String value) {
        for (RoleEnum role : values()) {
            if (role.getValue().equals(value)) {
                return role;
            }
        }
        return null;
    }

    /**
     * 是否是管理员
     *
     * @param role 角色
     * @return 是否是管理员
     */
    public static boolean isAdmin(String role) {
        return ADMIN.getValue().equalsIgnoreCase(role);
    }

    /**
     * 是否是代理
     *
     * @param role 角色
     * @return 是否是代理
     */
    public static boolean isAgent(String role) {
        return AGENT.getValue().equalsIgnoreCase(role);
    }

    /**
     * 是否是普通用户
     *
     * @param role 角色
     * @return 是否是普通用户
     */
    public static boolean isUser(String role) {
        return USER.getValue().equalsIgnoreCase(role);
    }

    /**
     * 获取角色Code
     *
     * @param role 角色
     * @return 角色Code
     */
    public static String getRoleCode(String role) {
        return SecurityConstants.ROLE_PREFIX + role;
    }
}
